<?php
/**
 * @file
 * "Callbacks" para la administración de las UEAs.
 */

/**
 * @param $accion Acción que el usuario desea hacer, los valores posibles son:
                  crear, editar, eliminar o listar
 * @param $id_uea
 * @return Cadena de texto con el código HTML que se mostrará en el explorador.
 */
function ueas_admin($accion = null, $id_uea = null)
{
    /* ejecuta una acción, dependiendo del valor de la variable */    
    switch($accion)
    {
        /* creación de una nueva UEA */
        case 'crear':    $salida = drupal_get_form('formulario_UEA', "crear");
                         break;

        /* editar la información de una UEA */
        case 'editar':   $salida = drupal_get_form('formulario_UEA', $id_uea);
                         break;

        /* eliminar una UEA */
        case 'eliminar': $salida = "";
                         break;
        /* lista todas la UEAs */
        case 'listar':   $salida = drupal_get_form('ueas_lista_admin',0,null);
                         break;

        /* acciones por defecto */
        default:       $salida = "";
    }
    
    /* regresa código HTML */
    return $salida;
}

/**
 * Formulario para crear o editar una nueva UEA
 *
 * @ingroup forms
 * 
 * @param $form_id ??No se de que es este argumento??
 * @param $id_uea Esta variable contiene el id de la ueaa a manejar, Si se va acrear una nueva no debe recivir un valor numérico
 * @return Cadena de texto con el código HTML que se mostrará en el explorador.
 * 
 * @see formulario_UEA_validate()
 * @see formulario_UEA_submit()
 */

 function formulario_UEA($form_id,$id_uea = null)
 {
	if(is_numeric($id_uea))
	{/*Editar una UEA existente*/
		/*Recupera los datos de una UEA de la base de datos*/
		$sql = "SELECT u.id_uea AS id, u.clave AS clave, u.id_division AS division, u.nombre, ".
				"u.creditos, u.trimestre, u.horas_teoricas AS horast, ".
				"u.horas_practicas AS horasp FROM {ueas} u WHERE id_uea = %d";
				
		$resultado = db_query($sql, $id_uea);
		$valores = db_fetch_array($resultado);
		
		/*Recupera información de la seriacion de esta UEA*/
		$resultado = db_query("SELECT id_uea_seriada FROM seriaciones WHERE id_uea = %d", $id_uea);
		
		/*Llena el arreglo $seriada con los datos obtenidos */
		while($tmp = db_fetch_array($resultado))
			$seriada[$tmp['id_uea_seriada']] = $tmp['id_uea_seriada'];
			
		$tri = $valores['trimestre'];
	}
	else
	{/*Cuando se desea crear una nueva UEA*/
		$valores = array
		(
			'clave' => "",
			'nombre' => "",
			'division' => "",
			'trimestre' => "",
			'creditos' => 0,
			'horast' => 0,
			'horasp' => 0
		);
		$tri = 14;
	}
	
	$divisiones = array();
	/*Busca las divisiónes en la base de datos*/
	$resultado = db_query("SELECT id_division, nombre_corto FROM divisiones");
	/*Llena el arreglo $divisiones con los datos obtenidos*/
	while($tmp = db_fetch_array($resultado))
		$divisiones[$tmp['id_division']] = $tmp['nombre_corto'];
		
	//AQUI VA LA BUSQUEDA DE CARRERAS EN AL BASE DE DATOS	
	$carreras = array();
	/*Busca las carreras en las cuales puede ser tomada esta UEA en la base de datos*/
	$resultado = db_query("SELECT clave, nombre FROM carreras");
	/*Llena el arreglo $divisiones con los datos obtenidos*/
	while($tmp = db_fetch_array($resultado))
		$carrera[$tmp['clave']] = $tmp['nombre'];


	/*ARREGLO DE SIMULACION DE CARRERAS*/
/*	$carrera = array
	(
		'Compu' => "Lic. en Computacion",
        'Elec' => "Ing. en Electronica",
        'Mate' => "Lic. en Matematicas",
        'Ener' => "Ing. en Energia",
        'Bio' => "Ing. en Biomedica"
	);
*/	
	/*Busca todas las UEAs existentes en la base de datos para una posible modificacion de la seriacion*/
	$resultado = db_query("SELECT id_uea, clave, trimestre FROM ueas WHERE trimestre<13");
	/*Inserta los datos obtenidos en el arreglo $seriacion*/
	while ($tmp = db_fetch_array($resultado))
		$seriacion[] = array('id_uea' => $tmp['id_uea'], clave => $tmp['clave'], trimestre => $tmp['trimestre']);
		
	$trimestre = array
        (
            '1' => "1ro",
            '2' => "2do",
            '3' => "3ro",
            '4' => "4to",
            '5' => "5to",
            '6' => "6to",
            '7' => "7mo",
            '8' => "8vo",
            '9' => "9no",
            '10' => "10mo",
            '11' => "11vo",
            '12' => "12vo",
            '13' => "Optativa de Computación",
        	'14' => "Otras Optativas"
        );
		

	
	/* -----Apartir de aqui se maneja el formulario-----*/
	/*Se declara una variable para llevar el ID d ela UEA*/
	$formulario['id'] = array
	(
		'#value' => $id_uea,
		'#type' => 'hidden'
	);
	/*Se declara el elemento que contiene la clave de la UEA*/
	$formulario['clave'] = array
	(
        '#description' => "Escribe la clave de la UEA (6 digitos)",
        '#default_value' => $valores['clave'],
        '#required' => true,
        '#title' => "Clave",
        '#type' => 'textfield',
		'#size' => 10,
		'#maxlength' => 6
        
    );

    /*Elemento que contiene el nombre de la uea*/
	$formulario['nombre'] = array
    (
        '#description' => " Escribe el nombre completo de la UEA; ejemplo:  Introducción a la programación",
        '#default_value' => $valores['nombre'],
        '#required' => true,
        '#title' => "Nombre",
        '#type' => 'textfield',
		'#size' => 60,
		'#maxlength' => 255
		
    );

	/*Elemento que contiene la division a la que pertenece*/
	$formulario['division'] = array
    (
        '#description' => "Selecciona a que division pertenece la UEA",
        '#default_value' => $valores['division'],
        '#options' => $divisiones,
        '#required' => true,
        '#title' => "Division",
        '#type' => 'select'
    );

	/*Elemento que contiene el triemstre al que pertenece*/
	$formulario['trimestre'] = array
    (
        '#description' => "Selecciona el trimestre al que corresponde dentro de la Lic. en Computación",
        '#default_value' => $valores['trimestre'],
        '#options' => $trimestre,
    '#required' => true,
        '#title' => "Trimestre",
        '#type' => 'select'
    );

	/*Elemento que contiene el numero de creditos*/
	$formulario['creditos']= array			
    (   
        '#description' => "Escribe el numero de creditos que cubre",
        '#default_value' => $valores['creditos'],
        '#required' => true,
        '#title' => "Creditos",
        '#type' => 'textfield',
		'#size' => 4,
		'#maxlength' => 3
    );

	/*Elemento que contiene el numero de horas teoricas */
	$formulario['horast']= array
    (   
        '#description' => "Escribe el numero de horas teoricas que cubre (Ejemplo: 4.5)",
        '#default_value' => $valores['horast'],
        '#required' => true,
        '#title' => "Horas teoricas",
        '#type' => 'textfield',
		'#size' => 2,
		'#maxlength' => 1
    );

	/*Elemento que contiene el numero de horas practicas */
	$formulario['horasp']= array
    (   
        '#description' => "Escribe el numero de horas practicas que cubre (Ejemplo: 3)",
        '#default_value' => $valores['horasp'],
        '#required' => true,
        '#title' => "Horas practicas",
        '#type' => 'textfield', 
		'#size' => 2,
		'#maxlength' => 1
    );

	/*Fieldset para mostrara las carreras de la division*/
	$formulario['carrera'] = array
    (
        '#description' => "Selecciona las Licenciaturas o Ingenierias que pueden tomar esta UEA",
        '#type' => 'fieldset',
        '#title' => t('Carreras que pueden tomarla'),
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,           
    );

	/*Ciclo para mostrara las carreras*/
	foreach($carrera as $carr){     
	    $formulario['carrera'][$carr] = array
	    (
	        '#type' => 'checkbox',
	        '#title' => $carr,
	    	'#default_value' => 0, 
			'#return_value' => 1
	    );
	};
	
	/*Condicion para mostrar mensaje dependiendo el trimestre de la UEA activa*/
	if($valores['trimestre']==1)
	{
		$cad1 = "Esta UEA no puede tener seriación";
	}
	else
	{
		$cad1 = "Selecciona las UEAs que son pre-requisito de esta";
	}
	
    /*Fieldset para mostrara las ueas existentes en la division*/            
	$formulario['seriacion'] = array
    (
        '#description' => $cad1,
        '#type' => 'fieldset',
        '#title' => t('Seriación de esta UEA'),
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,  
    );         
    
	/*Ciclo para mostrara las ueas*/
	if(is_array($seriacion))
	{	
		foreach($seriacion as $ser){
			if(	($ser['clave'] != $formulario['clave']['#default_value']) && ($ser['trimestre'] < $tri)){
				if(is_array($seriada) && in_array($ser['id_uea'],$seriada))
				{$seri=1;}
				else{$seri=0;}
				$formulario['seriacion'][$ser['clave']] = array
				(
					'#type' => 'checkbox',
					'#title' => $ser['clave'],
					'#default_value' => $seri, 
				'#return_value' => $ser['id_uea']+100
				);
			}
		};
	}
	else
	{
		drupal_set_message("Aun no hay UEAS registradas");
	}
    
	/*Boton de enviar*/
	$formulario['enviar'] = array
    (
        '#type' => 'submit',
        '#value' => "Enviar"
    );
    
    // $formulario['#redirect'] = 'node/2';
    return $formulario;
}


/**
 * -
 *
 * @ingroup forms
 * 
 * @param $id ??No se para que se usa este??
 * @param $formulario Es un arreglo con los elementos existentes dentro del formulario que serviran para la validación.
 * @return .
 */
function formulario_UEA_validate($id, &$formulario)
{
    if(!(is_numeric($formulario['values']['clave'])))
            form_set_error('clave', "La clave debe ser numerica");    
    if(!(is_numeric($formulario['values']['creditos'])))
            form_set_error('creditos', "La cantidad de creditos debe ser numerico");
    if(!(is_numeric($formulario['values']['horast'])))
            form_set_error('horast', "El numero de horas teoricas debe ser numerico");
    if(!(is_numeric($formulario['values']['horasp'])))
            form_set_error('horasp', "El numero de horas practicas debe ser numerico");
            
}

/**
 * -
 *
 * @ingroup forms
 * 
 * @param $id ??No se para que se usa este??
 * @param $formulario Es un arreglo con los elementos existentes dentro del formulario que seran utilizados para hacer transacciones.
 * @return Un redireccionamiento a la pagina de Administración de las ueas.
 */
function formulario_UEA_submit($id, &$formulario)
{
	if(is_numeric($formulario['values']['id']))
	$id_uea = $formulario['values']['id'];
	else
	$id_uea=null;

    $clave=$formulario['values']['clave'];       
    $id_division=$formulario['values']['division'];
    $nombre=$formulario['values']['nombre'];
    $creditos=$formulario['values']['creditos'];
    $trimestre=$formulario['values']['trimestre'];
    $horas_practicas=$formulario['values']['horasp'];
    $horas_teoricas=$formulario['values']['horast'];
    drupal_set_message("ya guarde :P");
//	$sql="CALL guarda($id_uea, '$clave', $id_division, '$nombre',$creditos,$trimestre,$horas_practicas,$horas_teoricas)";
//	db_query($sql);


	$sql="DELETE FROM seriaciones WHERE id_uea = %d";	
	db_query($sql,$id_uea);	
	if(is_numeric($id_uea))
	{
		$uea=$id_uea;
	}
	else
	{	
		$sql="SELECT MAX(id_uea) FROM ueas";
		$res=db_query($sql);
		$temp=db_fetch_array($res);
		$uea=$temp['id_uea'];				
	}
//	drupal_set_message("id -> ".$uea);

    foreach($formulario['values'] as $val)
    {		
		if(($val>100 && $val<200) && $val!= $formulario['values']['clave'])
		{
		$val=$val-100;
			if($val<$uea)
			{
				$sql="INSERT INTO seriaciones VALUES($uea,$val)";	 	
				db_query($sql);
			//	drupal_set_message($uea." seriada por -> ".$val);
			}
		}
    }
	//drupal_set_message("ya guarde :P");
    //return drupal_goto('admin/sph/ueas');

}

/**
 * Formulario que muestra una lista de todas las UEAs registradas.
 *
 * @ingroup forms
 * 
 * @return .
 *
 * @see theme_ueas_lista_admin()
 */
function ueas_lista_admin($id, $del, $eliminadas = null)
{
    /* cabecera de la tabla */
    $cabecera = array
    (
        theme('table_select_header_cell'),
        array('data' => "Clave", 'field' => 'u.clave'),
        array('data' => "Nombre", 'field' => 'u.nombre'),
        array('data' => "División", 'field' => 'd.nombre_corto'),
        t('Operations')
    );
    
    /* formulario que muestra las ueas */
    $form = array();
    
    /* número de UEAs por página */
    $num_pag = 20;

    /* número total de UEAs */
    $reg_total = "SELECT COUNT(*) FROM {ueas}";

    /* todas las ueas en la base de datos */
    $sql = "SELECT u.id_uea AS id, u.clave, d.nombre_corto AS division, u.nombre ".
           "FROM {ueas} u, {divisiones} d WHERE u.id_division = d.id_division";
    $sql .= tablesort_sql($cabecera);

    /* consulta a la base de datos con paginación */
    $_ueas = pager_query($sql, $num_pag, 0, $reg_total);

    /* todas las ueas */
    $ueas = array();
    
	/*Arreglo que se ocupa para la confirmacion de eliminacion*/
	$form['del'] = array('#value' => $del, '#type' => 'value');
	
    /* crea cada uno de los elementos del formualio */
    while($uea = db_fetch_object($_ueas))
    {
        $ueas[$uea->id] = '';
        $form['clave'][$uea->id] = array('#value' => $uea->clave);
        $form['nombre'][$uea->id] = array('#value' => $uea->nombre);
        $form['division'][$uea->id] = array('#value' => $uea->division);
        $form['operaciones'][$uea->id] = array('#value' => l('editar', "admin/sph/ueas/$uea->id/editar"));
    }
	    
    $form['ueas'] = array
    (
        '#type' => 'checkboxes',
        '#options' => $ueas
    );

    /* botón de borrado */
    $form['borrar'] = array
    (
        '#type' => 'submit',
        '#value' => "Borrar las UEAs seleccionadas",
    );
	
    /* elemento que muestra los números de página y demás elementos relacionados con la
     * paginación */
    $form['paginador'] = array('#value' => theme('pager', NULL, $num_pag, 0));

    return $form;
}

/**
 * Diseño de los elementos del formulario que enlista las UEAs.
 *
 * @ingroup themeable
 *
 * 
 * @param $form
 * @return .
 */
function theme_ueas_lista_admin($form)
{
    /* cabecera de la tabla */
    $cabecera = array
    (
        theme('table_select_header_cell'),
        array('data' => "Clave", 'field' => 'u.clave'),
        array('data' => "Nombre", 'field' => 'u.nombre'),
        array('data' => "División", 'field' => 'd.division'),
        t('Operations')
    );
    
    $salida = drupal_render($form['options']);

    if(isset($form['clave']) && is_array($form['clave']))
    {
        /* recorre cada uno de los registros (cada una de las UEAs) */
        foreach(element_children($form['clave']) as $key)
        {
            /* cada conjunto de datos de una UEA forma una columna de la tabla */
            $columnas[] = array
            (
                drupal_render($form['ueas'][$key]),
                drupal_render($form['clave'][$key]),
                drupal_render($form['nombre'][$key]),
                drupal_render($form['division'][$key]),
                drupal_render($form['operaciones'][$key]),
            );
        }
    }
    /* mensaje mostrado cuando no hay UEAs en la BD */
    else
        $columnas[] = array(array('data' => t("No se encontraron UEAs registradas."),
                                  'colspan' => '7'));

    /* crea la tabla */
    $salida .= theme('table', $cabecera, $columnas);

    /* muestra los elementos de paginación */
    if($form['paginador']['#value'])
        $salida .= drupal_render($form['pager']);
    
    /* botón de borrado, se muestra centrado */
    $salida .= '<div style="text-align: center">'.drupal_render($form['borrar']).'</div>';

    /* muestra los elementos restantes que no han sido procesados */
    $salida .= drupal_render($form);
    
    /* regresa código HTML */
    return $salida;
}

/**
 * -
 *
 * @ingroup forms
 * 
 * @param $id Identificador del formulario
 * @param $form Es un arreglo con los elementos existentes dentro del formulario que seran utilizados para hacer transacciones.
 * @return Un redireccionamiento a la pagina de Administración de las ueas.
 */
function ueas_lista_admin_validate($id, &$form)
{

//   return drupal_goto('admin/sph/ueas');

}


/**
 * -
 *
 * @ingroup forms
 * 
 * @param $id Identificador del formulario
 * @param $form Es un arreglo con los elementos existentes dentro del formulario que seran utilizados para hacer transacciones.
 * @return Un redireccionamiento a la pagina de Administración de las ueas.
 */
function ueas_lista_admin_submit($id, &$form)
{
	if($form['values']['del'] == 1)
	{
		foreach($form['values']['ueas'] as $id_uea)
		{
			if($id_uea)
			{
			$sql="DELETE FROM ueas WHERE id_uea = $id_uea";
			db_query($sql);
			drupal_set_message("Se borro  la uea ".$id_uea."?");
			}
		}
		return drupal_get_form('ueas_lista_admin',0, array());
	}
	else
	{
		foreach($form['values']['ueas'] as $id_uea)
		{
			if($id_uea)
			{
				$eliminadas[$id_uea] = $id_uea;
			}			
		}
		return drupal_get_form('ueas_lista_admin',1,$eliminadas);
	}
         drupal_set_message("borrando");
//   return drupal_goto('admin/sph/ueas');

}


?>
